#include <stdio.h>
#include "ofc/DSocket.h"
#include "ofc/DSocketAddress.h"
#include "ofc/DData.h"

int main(int argc, char *argv[])
{
  DSocket            *client = [DSocket new];
  DInetSocketAddress *addr   = [DInetSocketAddress new];

                                       // Setup a client
  [addr loopback :7000];               // Setup an address to localhost, port 7000

  printf("Open the socket ..\n");
  [client open :[addr family] :DSK_STREAM :[DSocket protocol :"tcp"]]; // Open the socket for tcp

  [client reuseAddr :YES];             // Socketoption: Reuse the socket

  printf("Wait for connection with the server..\n");
  if ([client connect :addr])          // Try to connect to the server
  {
    DData *received;

    printf("Send data to the server..\n");
    if (![client send :"Hello there .." :14 :0]) // Send data to server
      printf("Error sending data to server:%d\n", [client error]);

    printf("Receive data from the server..\n");
    received = [client recv :256 :0];            // Receive data from server

    if (received != nil)
    {
      printf("Length of received data:%ld\n", [received length]);

      [received free];
    }
    else
      printf("Error receiving data from server:%d\n", [client error]);

    printf("Close the connection..\n");
    [client shutdown :DSK_SHUT_RDWR];  // Shutdown connection

    [client close];                    // Close socket
  }
  else
    printf("No connection to the server:%d\n", [client error]);

  [client free];                       // Cleanup
  [addr   free];

  return 0;
}

